<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML>
<HEAD>
<TITLE>80386 Programmer's Reference Manual -- Opcode AAA</TITLE>
</HEAD>
<BODY STYLE="width:80ch">
<B>up:</B> <A HREF="c17.htm">
Chapter 17 -- 80386 Instruction Set</A><BR>
<B>prev:</B> <A HREF="s17_02.htm">
17.2 Instruction Format</A><BR>
<B>next:</B><A HREF="AAD.htm"> AAD  ASCII Adjust AX before Division</A>
<P>
<HR>
<P>
<H1>AAA -- ASCII Adjust after Addition</H1>

<PRE>
Opcode    Instruction    Clocks    Description

37        AAA            4         ASCII adjust AL after addition
</PRE>

<H2>Operation</H2>

<PRE>
IF ((AL AND 0FH) > 9) OR (AF = 1)
THEN
   AL := (AL + 6) AND 0FH;
   AH := AH + 1;
   AF := 1;
   CF := 1;
ELSE
   CF := 0;
   AF := 0;
FI;
</PRE>

<H2>Description</H2>

Execute AAA only following an 
<A HREF="ADD.htm">ADD</A> instruction that leaves a byte result
in the AL register. The lower nibbles of the operands of the 
<A HREF="ADD.htm">ADD</A> instruction
should be in the range 0 through 9 (BCD digits). In this case, AAA adjusts
AL to contain the correct decimal digit result. If the addition produced a
decimal carry, the AH register is incremented, and the carry and auxiliary
carry flags are set to 1. If there was no decimal carry, the carry and
auxiliary flags are set to 0 and AH is unchanged. In either case, AL is left
with its top nibble set to 0. To convert AL to an ASCII result, follow the
AAA instruction with <A HREF="OR.htm">OR</A> AL, 30H.

<H2>Flags Affected</H2>

AF and CF as described above; OF, SF, ZF, and PF are undefined

<H2>Protected Mode Exceptions</H2>

None

<H2>Real Address Mode Exceptions</H2>

None

<P>
<HR>
<P>
<B>up:</B> <A HREF="c17.htm">
Chapter 17 -- 80386 Instruction Set</A><BR>
<B>prev:</B> <A HREF="s17_02.htm">
17.2 Instruction Format</A><BR>
<B>next:</B><A HREF="AAD.htm"> AAD  ASCII Adjust AX before Division</A>
</BODY>
